package cn.rainbow.modules.sys.controller;

import cn.rainbow.common.annotation.SysLog;
import cn.rainbow.common.utils.Constant;
import cn.rainbow.common.utils.PageUtils;
import cn.rainbow.common.utils.R;
import cn.rainbow.common.validator.Assert;
import cn.rainbow.common.validator.ValidatorUtils;
import cn.rainbow.common.validator.group.AddGroup;
import cn.rainbow.common.validator.group.UpdateGroup;
import cn.rainbow.modules.sys.entity.SysAddrEntity;
import cn.rainbow.modules.sys.entity.SysRoleEntity;
import cn.rainbow.modules.sys.entity.SysUserEntity;
import cn.rainbow.modules.sys.form.PasswordForm;
import cn.rainbow.modules.sys.service.SysAddrService;
import cn.rainbow.modules.sys.service.SysUserRoleService;
import cn.rainbow.modules.sys.service.SysUserService;
import cn.rainbow.modules.sys.vo.SysAddrFlagVo;
import org.apache.commons.lang.ArrayUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 地址收件地址管理
 * 
 * @author   7sh
 * @email   dev@7sh.cn
 * @date 2019年01月05日16:44:37
 */
@RestController
@RequestMapping("/sys/addr")
public class SysAddrController extends AbstractController {


	@Autowired
	private SysAddrService sysAddrService;

	/**
	 * 所有地址列表
	 */
	@GetMapping("/list")
	@RequiresPermissions("sys:addr:list")
	public R list(@RequestParam Map<String, Object> params){

		PageUtils page = sysAddrService.queryPage(params);

		return R.ok().put("page", page);
	}

	/**
	 * 保存地址
	 */
	@SysLog("保存地址")
	@PostMapping("/save")
	@RequiresPermissions("sys:addr:save")
	public R save(@RequestBody SysAddrEntity addr){
		ValidatorUtils.validateEntity(addr, AddGroup.class);

		sysAddrService.save(addr);

		return R.ok();
	}

	/**
	 * 地址信息
	 */
	@GetMapping("/info/{id}")
	@RequiresPermissions("sys:addr:info")
	public R info(@PathVariable("id") Long id){

		SysAddrEntity addr = sysAddrService.selectById(id);

		return R.ok().put("addr", addr);
	}

	/**
	 * 修改地址
	 */
	@SysLog("修改地址")
	@PostMapping("/update")
	@RequiresPermissions("sys:addr:update")
	public R update(@RequestBody SysAddrEntity addr){
		ValidatorUtils.validateEntity(addr, UpdateGroup.class);

		sysAddrService.update(addr);

		return R.ok();
	}

	/**
	 * 删除地址
	 */
	@SysLog("删除地址")
	@PostMapping("/delete")
	@RequiresPermissions("sys:addr:delete")
	public R delete(@RequestBody Long[] ids){

		sysAddrService.deleteBatch(ids);

		return R.ok();
	}

	/**
	 * 地址标签
	 */
	@SysLog("地址标签")
	@GetMapping("/flags")
	@RequiresPermissions("sys:addr:save")
	public R flags(){

		List<SysAddrFlagVo> list = new ArrayList<>();

		SysAddrFlagVo flag1 = new SysAddrFlagVo();
		flag1.setVal("10");
		flag1.setTxt("家");
		list.add(flag1);

		SysAddrFlagVo flag2 = new SysAddrFlagVo();
		flag2.setVal("20");
		flag2.setTxt("公司");
		list.add(flag2);

		SysAddrFlagVo flag3 = new SysAddrFlagVo();
		flag3.setVal("30");
		flag3.setTxt("学校");
		list.add(flag3);


		return R.ok().put("list", list);
	}

}
